Subject: Revised NETBIOS connect flows.

From: "Steve Klein (254-5623)" <[email-masked]>
Date: Thu, 19 Aug 93 09:00:51 EDT

Scott, your NETBIOS flows are correct with respect to RFC 1434.

In case you are interested in the current 6611 implementation,
IBM decided to send NETBIOS_NQs and NETBIOS_NRs when a link is in
CIRCUIT_ESTABLISHED state (see Note 2 and Note 3 of the second flow).
This change was made after the release of RFC 1434.

I will be sending out a proposal for a change to the NETBIOS connect
sequence in a day or two.  This proposal will outline changes that
IBM is considering for DLSw on the 6611 based on our experiences
with NETBIOS applications in the field.  I would like to use this
proposal as a starting point for discussions toward the development
of a standard that could be adopted by this siglet.

Steve Klein

------------------------------- Referenced Note ---------------------------
>Subject: Revised NETBIOS connect flows.
>From: [email-masked] (Scott Adams)
>Date: Thu, 12 Aug 1993 15:06:23 -0400 (EDT)
>Message-Id: <[email-masked]>
>X-Mailer: ELM [version 2.4 PL20]
>Mime-Version: 1.0
>Content-Type: text/plain; charset=US-ASCII
>Content-Transfer-Encoding: 7bit
>Content-Length: 8678
>
>Hello again,
>
>I had previously submitted an example of a NETBIOS connect flow.  I've
>discovered that there were errors in that flow diagram, and I'd like
>to fix that it and provide a more common connect flow as the primary one.
>
>The network looks like:
>
>                  +----------+                  +----------+
>                  |          |      Tunnel      |          |
>                  |   DLSw   +==================+   DLSw   |
>                  |    A     |                  |    B     |
>                  +----+-----+                  +----+-----+
>                       |                             |
>                  LAN  |                         LAN |
>           -------+----+-----               ---------+---+--------
>                  |                                      |
>            +-----+-----+                          +-----+-----+
>            | End Stn 1 |                          | End Stn 2 |
>            +-----------+                          +-----------+
>
>First example connect flow:
>
>        End Stn 1         DLSw A                DLSw B         End Stn 2
>        ---------         ------                ------         ---------
>           |         [DISCONNECTED]       [DISCONNECTED]          |
>           | Add_Name_Qry  |    NETBIOS_ANQ      | Add_Name_Qry   |
>Note 1.    | ------------> | ------------------> | -------------> |
>           |      .        |         .           |       .        |
>           |      .        |         .           |       .        |
>           |      .        |         .           |       .        |
>           | Name_Qry(C)   |    NETBIOS_NQ       |  Name_Qry(C)   |
>Note 2.    | ------------> | ------------------> | -------------> |
>           |         [DISCONNECTED]       [RESOLVE_PEND]          |
>           |  Name_Rec(L)  |    NETBIOS_NR       |   Name_Rec(L)  |
>Note 3.    | <------------ | <------------------ | <------------- |
>           |         [CIRCUT_ESTAB]       [CIRCUIT_PEND]          |
>           |               |    REACH_ACK        |                |
>           |               | ------------------> |                |
>           |               |              [CIRCUIT_ESTAB]         |
>           |  SABME        |    CONTACT          |  SABME         |
>Note 4.    | ------------> | ------------------> | -------------> |
>           |     UA  [CONNECT_PEND]       [CONTACT_PEND]      UA  |
>           | <------------ |       .             | <------------- |
>Note 5.    |  RR           |       .             |  RR            |
>           | ------------> |       .             | -------------> |
>           |          RNR  |       .      [CONNECTED]         RR  |
>           | <------------ |     CONTACTED       | <------------- |
>           |           RR  | <-----------------  |                |
>           | <------------ |                     |                |
>           |         [CONNECTED]                 |                |
>           | Sess_Init     |   I-Frame           |  Sess_Init     |
>Note 6.    | ------------> | ------------------> | -------------> |
>           |               |                     |                |
>           | Sess_Conf     |    I-Frame          |  Sess_Conf     |
>           | <------------ | <------------------ | <------------- |
>           |               |                     |                |
>           |               |                     |                |
>
>Note 1.  This is a broadcast Add_Name_Query intended to register its
>         name and check for conflicts.  If no other end station is
>         using this name and there are no name conflicts, then it
>         assumes it can use it.
>
>Note 2.  This is a broadcast Name_Query Call packet that is intended
>         to find out if the destination end station has a LISTEN
>         outstanding for the source Name.
>
>Note 3.  This Name_Recognized indicates that a LISTEN was outstanding,
>         meaning it's ok to establish a session.
>
>Note 4.  The SABME initiates the LLC Type 2 Connection for the NetBIOS
>         session.
>
>Note 5.  I have shown what I think connection establishment would look
>         like using the immediate UA/RNR response indicated in the
>         RFC.  Witholding the UA could also be applied here, allowing
>         the RNR to be dispensed with.
>
>Note 6.  The Session_Init packet begins the transmission of I frames
>         over the new connection, and initiates the NetBIOS session.
>
>An  alternative connect sequence (seen from Windows NT) is:
>
>[Note that this was the sequence I provided in my original message,
>with appropriate corrections.  There were two errors.  One was that
>the SSP pkts sent between DLSw in response to NB_NAME_QUERY/RECOGNIZED
>pkts after the switches enter CIRCUIT_ESTABLISHED state should be
>DGRMFRAMEs, not NETBIOS_NQ and NETBIOS_NR.  Also, I left out the
>REACH_ACK pkt after receipt of the NETBIOS_NR frame.]
>
>        End Stn 1         DLSw A                DLSw B         End Stn 2
>        ---------         ------                ------         ---------
>           |         [DISCONNECTED]       [DISCONNECTED]          |
>           | Name_Qry(F)   |    NETBIOS_NQ       | Name_Qry(F)    |
>Note 1.    | ------------> | ------------------> | -------------> |
>           |         [DISCONNECTED]       [RESOLVE_PEND]          |
>           |     Name_Rec  |    NETBIOS_NR       |      Name_Rec  |
>Note 3.    | <------------ | <------------------ | <------------- |
>           |         [CIRCUT_ESTAB]       [CIRCUIT_PEND]          |
>           |               |    REACH_ACK        |                |
>           |               | ------------------> |                |
>           |               |              [CIRCUIT_ESTAB]         |
>           | Name_Qry(C)   |    DGRMFRAME        |  Name_Qry(C)   |
>Note 2.    | ------------> | ------------------> | -------------> |
>           |               |                     |                |
>           |  Name_Rec(L)  |    DGRMFRAME        |   Name_Rec(L)  |
>Note 3.    | <------------ | <------------------ | <------------- |
>           |               |                     |                |
>           |  SABME        |    CONTACT          |  SABME         |
>Note 4.    | ------------> | ------------------> | -------------> |
>           |     UA  [CONNECT_PEND]       [CONTACT_PEND]      UA  |
>           | <------------ |       .             | <------------- |
>Note 5.    |  RR           |       .             |  RR            |
>           | ------------> |       .             | -------------> |
>           |          RNR  |       .      [CONNECTED]         RR  |
>           | <------------ |     CONTACTED       | <------------- |
>           |           RR  | <-----------------  |                |
>           | <------------ |                     |                |
>           |         [CONNECTED]                 |                |
>           | Sess_Init     |   I-Frame           |  Sess_Init     |
>Note 6.    | ------------> | ------------------> | -------------> |
>           |               |                     |                |
>           | Sess_Conf     |    I-Frame          |  Sess_Conf     |
>           | <------------ | <------------------ | <------------- |
>           |               |                     |                |
>           |               |                     |                |
>
>Note 1.  This is a broadcast Name_Query intended to locate the
>         destination end station's MAC addr.
>
>Note 2.  This is a directed Name_Query Call packet that is intended to
>         find out if the destination end station has a LISTEN
>         outstanding for the source Name.
>
>Note 3.  This Name_Recognized indicates that a LISTEN was outstanding,
>         meaning it's ok to establish a session.
>
>Note 4.  The SABME initiates the LLC Type 2 Connection for the NetBIOS
>         session.
>
>Note 5.  I have shown what I think connection establishment would look
>         like using the immediate UA/RNR response indicated in the
>         RFC.  Witholding the UA could also be applied here, allowing
>         the RNR to be dispensed with.
>
>Note 6.  The Session_Init packet begins the transmission of I frames
>         over the new connection, and initiates the NetBIOS session.
>
>In both scenarios session disconnect is handled as an I frame within
>the LLC 2 connection (SESSION_END frame), and the LLC 2 connection is
>disconnected normally.  Once the LLC 2 connection is disconnected then
>all remnants of the NETBIOS session are gone.
>
>These are how I think such connect flows are supposed to work over
>DLS.  If I'm wrong, PLEASE correct me (particularly those at IBM,
>who are the only ones with actual experience...).  Thanks,
>
>Scott
>

---

From: Bernard Brady <[email-masked]>
Date: Wed, 1 Sep 93 10:05:11 EDT

Netbios question:

Under Section 3.3 of the RFC the following paragraph stipulates what is
contained in the exchange of DLSw NETBIOS control messages.

> For the exchange of NetBIOS control messages, the entire DLC header is
> carried as part of the message unit.  This includes the MAC header,
> with the routing information field padded to 18 bytes, and the LLC
> header.  The following message types are affected: NETBIOS_NQ,
> NETBIOS_NR, NETBIOS_ANQ, NETBIOS_ANR, and DATAFRAME when
>  being used by NetBIOS systems.  The routing information in the DLC header
>  is not used by the remote Data Link Switch upon receiving the above five messages.

Am I correct in thinking that the entire UI frame associated with these
messages is also contained within theses DLSw messages? 

Bernie Brady